home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Audio, Video & Photo / Audacity 1.3.5 / audacity-win-unicode-1.3.5.exe / {app} / Plug-Ins / delay.ny < prev    next >
Lisp/Scheme  |  2008-02-04  |  5KB  |  132 lines

  1. ;nyquist plug-in
  2. ;version 3
  3. ;type process
  4. ;name "Delay..."
  5. ;action "Performing Delay Effect..."
  6. ;info "by Roger Dannenberg, modified by David R. Sky\nReleased under terms of the GNU General Public License Version 2 \nDelay type: 'bouncing ball' makes the echoes occur increasingly close\ntogether (faster); 'reverse bouncing ball' makes them occur increasingly far\napart (slower). In either bouncing ball effect, delay time is not time between\nechoes but the * maximum * delay time in bounces.\nApplying delay can cause clipping (distortion), especially when reducing the\ndecay value and using more echoes. It's normally best to use Effect > Amplify\nto set the peak amplitude to -6 dB before using delay.     
  7.  
  8. ;control delay-type "Delay type" choice "regular,bouncing ball,reverse bouncing ball" 0
  9. ;control decay "Decay amount [dB; negative value increases volume]" real "" 6 -1 24
  10. ;control delay "Delay time [seconds]" real "" 0.5 0 5
  11. ;control shift "Pitch change per echo [semitones; negative value = lower, 0 is off]" real "" 0 -2 2
  12. ;control count "Number of echoes" int "" 5 1 30
  13.  
  14. ; Delay by Roger B. Dannenberg
  15. ; modified by David R. Sky October 2007, 
  16. ; adding negative decay values, which gives delay effect
  17. ; increasing volume with each delay; and adding
  18. ; bouncing ball and reverse bouncing ball delay effects
  19. ; and pitch [semitone] change with each echo.
  20. ; modified by Richard Ash January 2008, removing all 
  21. ; normalization functions. 
  22.  
  23. ; Note by Roger Dannenberg: this effect will use up memory proportional to
  24. ; delay * count, since that many samples must be buffered
  25. ; before the first block is freed.
  26.  
  27. ; initialize empty error message
  28. (setf error-msg "")
  29.  
  30.  
  31. ; check function: returns 1 on error
  32. (defun check (arg min max)
  33. (if (and (>= arg min) (<= arg max))
  34. 0 1))
  35.  
  36.  
  37. ; checking for erroneous user-input values:
  38. (setf error-msg (if (= (check decay -1 24) 0)
  39. error-msg 
  40. (strcat error-msg 
  41. (format nil "Decay value '~a' outside valid range -1.0 to 24.0 dB. 
  42. " decay))))
  43.  
  44. (setf error-msg (if (= (check delay 0 5) 0)
  45. error-msg 
  46. (strcat error-msg 
  47. (format nil "Delay value '~a' outside valid range 0.0 to 5.0 seconds. 
  48. " delay))))
  49.  
  50. (setf error-msg (if (= (check shift -2 2) 0)
  51. error-msg 
  52. (strcat error-msg 
  53. (format nil "Pitch change value '~a' outside valid range -2.0 to 2.0 semitones. 
  54. " shift))))
  55.  
  56. (setf error-msg (if (= (check count 1 30) 0)
  57. error-msg 
  58. (strcat error-msg 
  59. (format nil "Number of echoes '~a' outside valid range 1 to 30 echoes. 
  60. " count))))
  61. ; finished error-checking
  62.  
  63. ; if error-msg is longer than 0 characters,
  64. ; prepend opening message
  65. (setf error-msg (if (> (length error-msg) 0)
  66. (strcat "Error -\n\nYou have input at least one invalid value:
  67. " error-msg)
  68. error-msg))
  69.  
  70. (cond ; 1
  71. ((> (length error-msg) 0)
  72. (format nil "~a" error-msg))
  73.  
  74. (t ; no input errors, perform delay
  75.  
  76. ; convert shift value to a value the Nyquist code understands
  77. (setf shift (expt 0.5 (/ shift 12.0)))
  78.  
  79. ; for bouncing ball effects, set delay time to delay time/count
  80. (setf delay (if (> delay-type 0)
  81. (/ delay count) delay))
  82.  
  83.  
  84.  
  85. ; function to stretch audio 
  86. (defun change (sound shift)
  87. (if (arrayp sound)
  88. (vector
  89. (force-srate 44100 (stretch-abs shift (sound (aref sound 0))))
  90. (force-srate 44100 (stretch-abs shift (sound (aref sound 1)))))
  91. (force-srate 44100 (stretch-abs shift (sound sound)))))
  92.  
  93.  
  94. (cond ; 2
  95. ((= delay-type 0) ; regular delay
  96. ; delay function
  97. (defun delays (s decay delay count shift)
  98.   (if (= count 0) (cue s)
  99.      (sim (cue s)
  100.             (loud decay (at delay (delays (change s shift) 
  101. decay delay (- count 1) shift))))))
  102.  
  103. (stretch-abs 1 (delays s (- 0 decay) delay count shift)))
  104.  
  105.  
  106. ((= delay-type 1) ; bouncing ball delay
  107. ; bouncing ball delay function
  108. (defun bounces (s decay delay count shift)
  109.   (if (= count 0) (cue s)
  110.       (sim (cue s)
  111.                (loud decay (at (mult delay count) 
  112. (bounces (change s shift) decay delay 
  113. (- count 1) shift)))))) 
  114.  
  115. (stretch-abs 1 (bounces s (- 0 decay) delay count shift)))
  116.  
  117.  
  118. ((= delay-type 2) ; reverse bouncing ball delay
  119. ; reverse bouncing ball delay function
  120. (defun revbounces (s decay delay count revcount shift)
  121.   (if (= count 0) (cue s)
  122.       (sim (cue s)
  123.                (loud decay (at (mult delay (- revcount count))
  124. (revbounces (change s shift) decay delay 
  125. (- count 1 ) revcount shift)))))) 
  126.  
  127. (setf revcount (1+ count))
  128. (stretch-abs 1 (revbounces s (- 0 decay) delay count revcount shift)))
  129. ) ; end cond2, different delay effect choices
  130. ) ; end cond1 t
  131. ) ; end cond 1
  132.